A kernel is the central module of an operating system. It is the part of the operating system that typically loads first, and remains in main memory during system operation. Because the kernel remains in memory, it is important for the kernel to be as small as possible while still providing all the essential services required by other parts of the operating system and applications. Some of those essential services include, for example, memory management, process and task management, and disk management for example.
Because computing technology continues to evolve, kernels too must evolve in order to meet new technological requirements. In the past, when kernels were reasonably simple and functions limited, a kernel could be easily understood. As such, technological developments could be readily addressed. However, as technology has progressed and users have demanded increased functionality in computing systems, so kernel functions have increased in number and in complexity to meet this demand.
Referring to FIG. 1, FIG. 1 is diagrammatic flowchart illustrating a conventional method of making kernel changes. For example, at a first step 104, source code may be edited. In this illustration, source code refers to kernel source code. As can be appreciated, source code may be edited by any number of means well known in the art. Source code may be edited for any of a number of reasons like, for example, adding functionality, deleting extraneous code, or debugging code. Once kernel source code has been edited, kernel source code may be recompiled at a step 108. The time representing a recompile step is indicated as T1. In some examples, recompiling kernel source code might take as long as 4 to 8 hours. It can be appreciated that methods reducing or eliminating recompile time T1 would be desirable.
At a next step 112, a system on which a recompiled kernel is targeted may be rebooted. The time representing a reboot step is indicated as T2. In some examples, a reboot of such a system might require 10 minutes to 5 hours. It may be noted that even for small changes in source code, a recompile step and a reboot step may be required. Thus, even simple changes might require a significant amount of downtime while a system is prepared to run. It can be appreciated that methods reducing or eliminating reboot time T2 would be desirable. For example, in some production environments, reboots may be cost prohibitive as a system outage may result in increased operational overhead, lower revenue, lower production, etc. Once a system has been rebooted, a trace program may be run at a step 116. Run data may then be gathered at a step 120. Run data may include any of a number of variables of interest related to kernel activity. Finally, the method determines whether more changes to kernel source code are desired at a step 124. Changes may be made based on results, for example, gathered from run data step 120.
As can be seen, methods of reducing down time due to recompiling and rebooting may be desirable when making or testing kernel changes, particularly where changes are incremental or numerous. Thus, methods and tools for executing and tracing user-specified kernel instructions.